summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-30 23:03:50 +0200
committerÉtienne Loks <etienne.loks@peacefrogs.net>2012-08-30 23:03:50 +0200
commitcf8baa122fb8b46a96ddbf090c91538343e7f01e (patch)
tree2196b42a46aa0ddde18aec066acedd366e00b94b
parent999e9bb0258426aebc90358202c86dcf6579dfaf (diff)
downloadChimère - projet Saclay-cf8baa122fb8b46a96ddbf090c91538343e7f01e.tar.bz2
Chimère - projet Saclay-cf8baa122fb8b46a96ddbf090c91538343e7f01e.zip
Work on route form
-rw-r--r--forms.py11
-rw-r--r--static/saclay/css/styles-saclay.css6
-rw-r--r--static/saclay/js/interface.js91
-rw-r--r--templates/chimere/blocks/routing.html5
-rw-r--r--templates/chimere/edit.html44
-rw-r--r--templates/chimere/main_map.html5
-rw-r--r--urls.py4
-rw-r--r--views.py46
8 files changed, 146 insertions, 66 deletions
diff --git a/forms.py b/forms.py
index a06d67e..77a9865 100644
--- a/forms.py
+++ b/forms.py
@@ -24,7 +24,8 @@ from django import forms
from django.utils.translation import ugettext as _
from chimere.models import SubCategory
-from chimere.forms import MarkerForm as BaseMarkerForm
+from chimere.forms import MarkerForm as BaseMarkerForm, \
+ RouteForm as BaseRouteForm
from chimere.widgets import TextareaWidget
class MarkerForm(BaseMarkerForm):
@@ -36,3 +37,11 @@ class MarkerForm(BaseMarkerForm):
self.fields['categories'].widget.choices = [('', _(u"Select"))] + \
SubCategory.getAvailableTuples()
+class RouteForm(BaseRouteForm):
+ categories = forms.ChoiceField(choices=[], widget=forms.Select)
+ description = forms.CharField(widget=TextareaWidget, required=False)
+
+ def __init__(self, *args, **kwargs):
+ super(RouteForm, self).__init__(*args, **kwargs)
+ self.fields['categories'].widget.choices = [('', _(u"Select"))] + \
+ SubCategory.getAvailableTuples()
diff --git a/static/saclay/css/styles-saclay.css b/static/saclay/css/styles-saclay.css
index 3d2784b..83c3743 100644
--- a/static/saclay/css/styles-saclay.css
+++ b/static/saclay/css/styles-saclay.css
@@ -508,6 +508,12 @@ input#id_name{
width:90%;
}
+#itinerary_field #id_transport_div,
+#itinerary_field #id_speed_div
+{
+ display:none;
+}
+
.single-line label{
display:inline-block;
width:80px;
diff --git a/static/saclay/js/interface.js b/static/saclay/js/interface.js
index 9c7dec9..686e66e 100644
--- a/static/saclay/js/interface.js
+++ b/static/saclay/js/interface.js
@@ -1,12 +1,16 @@
$(function(){
- var _frm_editmarker_initialized;
- var _frm_editroute_initialized;
- var _frm_editevent_initialized;
-
var update_editmarker = function(){
+ $('#action-edit-event').removeClass('ui-state-active');
+ $('#action-edit-route').removeClass('ui-state-active');
+ $('#action-edit-marker').addClass('ui-state-active');
+ $('#frm-edit-route').hide();
+ $('#frm-edit-event').hide();
+ $('#frm-edit-marker').show();
$.ajax({url: edit_url,
dataType: "html",
success: function (data) {
+ $('#frm-edit-event').html('');
+ $('#frm-edit-route').html('');
$('#frm-edit-marker').html(data);
$("#main-map").chimere('activateMarkerEdit');
},
@@ -18,9 +22,17 @@ $(function(){
};
var update_editevent = function(){
+ $('#action-edit-marker').removeClass('ui-state-active');
+ $('#action-edit-route').removeClass('ui-state-active');
+ $('#action-edit-event').addClass('ui-state-active');
+ $('#frm-edit-marker').hide();
+ $('#frm-edit-route').hide();
+ $('#frm-edit-event').show();
$.ajax({url: edit_event_url,
dataType: "html",
success: function (data) {
+ $('#frm-edit-marker').html('');
+ $('#frm-edit-route').html('');
$('#frm-edit-event').html(data);
$("#main-map").chimere('activateMarkerEdit');
},
@@ -31,8 +43,36 @@ $(function(){
});
};
+ var update_editroute = function(){
+ $('#action-edit-marker').removeClass('ui-state-active');
+ $('#action-edit-event').removeClass('ui-state-active');
+ $('#action-edit-route').addClass('ui-state-active');
+ $('#frm-edit-marker').hide();
+ $('#frm-edit-event').hide();
+ $('#frm-edit-route').show();
+ $.ajax({url: edit_route_url,
+ dataType: "html",
+ success: function (data) {
+ $('#frm-edit-marker').html('');
+ $('#frm-edit-event').html('');
+ $('#frm-edit-route').html(data);
+ $("#main-map").chimere('activateRouteEdit');
+ },
+ error: function (data) {
+ $('#frm-edit-route').html("<p class='warning'>"+
+ default_error_message+"</p>");
+ }
+ });
+ };
+
$("#action-carte").click(function(){
$("#main-map").chimere('activateContextMenu');
+ if($("#itinerary_field").html()){
+ $("#chimere_itinerary_form").appendTo("#chimere_itinerary_panel");
+ if($("#chimere_itinerary").css('display') != 'none'){
+ $("#chimere_itinerary_form").hide();
+ }
+ }
$('#action-participate').removeClass('ui-state-active');
$('#action-carte').addClass('ui-state-active');
$('#edit-actions').hide();
@@ -48,45 +88,10 @@ $(function(){
$('#edit-actions').show();
$('#map-panel').hide();
$('#edit-panel').show();
- // if the default is initialized the other are not
- if (!_frm_editmarker_initialized){
- update_editmarker();
- _frm_editmarker_initialized = true;
- }
- });
-
- $("#action-edit-event").click(function(){
- if (!_frm_editevent_initialized){
- _frm_editevent_initialized = true;
- update_editevent();
- }
- $('#action-edit-marker').removeClass('ui-state-active');
- $('#action-edit-route').removeClass('ui-state-active');
- $('#action-edit-event').addClass('ui-state-active');
- $('#frm-edit-marker').hide();
- $('#frm-edit-route').hide();
- $('#frm-edit-event').show();
+ update_editmarker();
});
- $("#action-edit-marker").click(function(){
- $('#action-edit-event').removeClass('ui-state-active');
- $('#action-edit-route').removeClass('ui-state-active');
- $('#action-edit-marker').addClass('ui-state-active');
- $('#frm-edit-route').hide();
- $('#frm-edit-event').hide();
- $('#frm-edit-marker').show();
- });
-
- $("#action-edit-route").click(function(){
- if (!_frm_editroute_initialized){
- _frm_editroute_initialized = true;
- update_editroute();
- }
- $('#action-edit-event').removeClass('ui-state-active');
- $('#action-edit-marker').removeClass('ui-state-active');
- $('#action-edit-route').addClass('ui-state-active');
- $('#frm-edit-marker').hide();
- $('#frm-edit-event').hide();
- $('#frm-edit-route').show();
- });
+ $("#action-edit-event").click(update_editevent);
+ $("#action-edit-marker").click(update_editmarker);
+ $("#action-edit-route").click(update_editroute);
});
diff --git a/templates/chimere/blocks/routing.html b/templates/chimere/blocks/routing.html
index accad59..2165a48 100644
--- a/templates/chimere/blocks/routing.html
+++ b/templates/chimere/blocks/routing.html
@@ -7,8 +7,9 @@
{{ hidden }}
{% endfor %}
{% for field in itinerary_form.visible_fields %}
- {% if field.label %}<p><label for='{{field.auto_id}}'>{{ field.label }}</label></p>{%endif%}
- <p>{{field}}</p>
+ <div id='{{field.auto_id}}_div'>
+ {% if field.label %}<label for='{{field.auto_id}}'>{{ field.label }}</label>{%endif%}
+ {{field}}</div>
{% endfor %}
<span id='search_routing'>{% trans "Search" %}</span>
</div>
diff --git a/templates/chimere/edit.html b/templates/chimere/edit.html
index 9f39adf..f6a7a68 100644
--- a/templates/chimere/edit.html
+++ b/templates/chimere/edit.html
@@ -1,23 +1,32 @@
{% load i18n chimere_tags adminmedia inline_formset%}
{% if submited %}{% submited %}{% endif %}
<div class='edit'>
- {% if event %}
- <h3>{% trans "Add an event" %}</h3>
+ {% if event %}<h3>{% trans "Add an event" %}</h3>
{% else %}
- <h3>{% trans "Add a location" %}</h3>
- {% endif%}
+ {% if route %}<h3>{% trans "Add a route" %}</h3>
+ {% else %}<h3>{% trans "Add a location" %}</h3>
+ {% endif%}{% endif%}
<div class='notice'>
Consigne d'utilisation : Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nunc eu luctus ipsum. Donec vel urna a turpis consectetur consectetur. Vestibulum ut enim vel odio porta vulputate.
</div>
<p class='notice'>* {% trans "indicates a mandatory field" %}</p>
- <form enctype="multipart/form-data" method='post' action='{% url edit %}' id='marker_form'>
+ <form enctype="multipart/form-data" method='post' action='{% if route%}{% url edit-route%}{%else%}{% url edit %}{% endif %}' id='proposition_form'>
{% csrf_token %}
+ {% if route %}
+ <h4 id='head_route' class='toggle maximized'>{% trans "Route" %} <span class='mandatory'>*</span></h4>
+ <div id='itinerary_field_contener'>
+ <input id='id_route' name='route' type='hidden'/>
+ <label class='error'>{% trans "Select a route for this new site (have you submit the search?)" %}</label>
+ <div id='itinerary_field'></div>
+ <hr/>
+ </div>
+ {% else %}
<div class="fieldWrapper point_label">
<label class='error'>{% trans "Select a location for this new site" %}</label>
<input type='hidden' id='id_point' name='point'/>
- </div>
+ </div>{% endif %}
<div class="fieldWrapper">
- <label for="id_name">{% trans "Name of the location"%} <span class='mandatory'>*</span></label>
+ <label for="id_name">{%if route%}{% trans "Name of the route"%}{% else %}{% if event %}{% trans "Name of the event"%}{% else %}{% trans "Name of the location"%}{% endif %}{% endif %} <span class='mandatory'>*</span></label>
{% if form.name.errors %}<div class='errors'>{{ form.name.errors }}</div>{% endif %}
{{ form.name }}
</div>
@@ -29,7 +38,7 @@
<hr/>
{% if event %}
<div class="fieldWrapper">
- <label for="id_start_date">{% trans "Start date" %}</label>
+ <label for="id_start_date">{% trans "Start date" %} <span class='mandatory'>*</span></label>
{{ form.start_date.errors }}
{{ form.start_date }}
</div>
@@ -108,9 +117,13 @@
<p>{% trans "Upload in progress. Please wait..." %}</p>
<p><img src='{{STATIC_URL}}chimere/img/ajax-loader.gif'/></p>
</div>
- <p><button id='marker_form_submit' type='button'>{% trans 'Propose'%}</button></p>
+ <p><button id='proposition_form_submit' type='button'>{% trans 'Propose'%}</button></p>
<script text='text/javascript'>
$(function(){
+ {% if route %}
+ $("#chimere_itinerary_form").appendTo($("#itinerary_field"));
+ $('#main_map').chimere('updateRoutingInput');
+ {% else %}$('#main_map').chimere('updateMarkerInput');{% endif %}
$('.toggle').click(function(){
var div_item = $(this).next();
div_item.toggle();
@@ -130,14 +143,15 @@
dialogClass:'alert-box'
}
);
- $('#marker_form_submit').click(function(){
+ $('#proposition_form_submit').click(function(){
// JS tests because if a file is submited there is no way
// to refill the form with (browser security issue)
tinyMCE.triggerSave();
- validation = [
- 'id_point',
+ validation = [{%if route%}
+ 'id_route'{%else%}'id_point'{% endif %},
'id_name',
- 'id_categories',
+ 'id_categories',{% if event %}
+ 'id_start_date',{% endif %}
'id_submiter_email'
];
var validated = true;
@@ -160,9 +174,9 @@
$("#panel").scrollTop(0);
return false;
}
- $("#marker_form").ajaxForm();
+ $("#proposition_form").ajaxForm();
$("#upload_in_progress").dialog('open');
- $("#marker_form").ajaxSubmit({
+ $("#proposition_form").ajaxSubmit({
target:"#frm-edit-marker",
success:function(msg){
$("#panel").scrollTop(0);
diff --git a/templates/chimere/main_map.html b/templates/chimere/main_map.html
index 4eb33ae..e5ec99e 100644
--- a/templates/chimere/main_map.html
+++ b/templates/chimere/main_map.html
@@ -13,8 +13,9 @@
<script type='text/javascript' language='javascript'>
var default_error_message = "{% trans "Error while loading the page... Refresh the page. If the problem persist contact the webmaster." %}";
- var edit_url = {% url edit %};
- var edit_event_url = {% url edit-event %};
+ var edit_url = "{% url edit %}";
+ var edit_event_url = "{% url edit-event %}";
+ var edit_route_url = "{% url edit-route %}";
</script>
<script src="{{ STATIC_URL }}saclay/js/interface.js"></script>
{% endblock %}
diff --git a/urls.py b/urls.py
index ffcce85..ea4e106 100644
--- a/urls.py
+++ b/urls.py
@@ -42,6 +42,10 @@ urlpatterns += patterns('',
url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-event/(?P<item_id>\w+)/(?P<submited>\w+)?$',
'chimere_saclay.views.edit', kwargs={'event':True},
name="edit-event-item"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-route/$',
+ 'chimere_saclay.views.edit_route', name="edit-route"),
+ url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?edit-route/(?P<item_id>\w+)/(?P<submited>\w+)?$',
+ 'chimere_saclay.views.edit_route', name="edit-route-item"),
url(r'^', include('chimere.urls', namespace="chimere")),
)
diff --git a/views.py b/views.py
index 0214304..0be5d77 100644
--- a/views.py
+++ b/views.py
@@ -21,10 +21,10 @@ from django.conf import settings
from django.shortcuts import render_to_response
from django.template import RequestContext
-from forms import MarkerForm
+from forms import MarkerForm, RouteForm
from chimere.actions import actions
-from chimere.models import Marker, PropertyModel
+from chimere.models import Marker, Route, PropertyModel
from chimere.views import get_edit_page
get_edit_marker = get_edit_page('edit', Marker, MarkerForm)
@@ -59,7 +59,47 @@ def edit(request, area_name="", item_id=None, submited=False, event=False):
'properties':declared_fields,
'filtered_properties':filtered_properties,
'submited':submited,
- 'event':event
+ 'event':event,
+ })
+ # manualy populate the custom widget
+ if 'subcategory' in form.data and form.data['subcategory']:
+ response_dct['current_category'] = int(form.data['subcategory'])
+ return render_to_response('chimere/edit.html', response_dct,
+ context_instance=RequestContext(request))
+
+get_edit_route = get_edit_page('edit-route', Route, RouteForm)
+
+def edit_route(request, area_name="", item_id=None, submited=False):
+ """
+ Edition page
+ """
+ response, values, sub_categories = get_edit_route(request, area_name,
+ item_id, ['M', 'B'])
+ if response:
+ return response
+ item_id, init_item, response_dct, form, formset_multi, formset_picture = \
+ values
+ # get the "manualy" declared_fields. Ie: properties
+ declared_fields = form.declared_fields.keys()
+ declared_fields = PropertyModel.objects.filter(available=True).all()
+ filtered_properties = PropertyModel.objects.filter(available=True,
+ subcategories__id__isnull=False).all()
+ response_dct.update({
+ 'actions':actions,
+ 'action_selected':('contribute', 'edit'),
+ 'map_layer':settings.CHIMERE_DEFAULT_MAP_LAYER,
+ 'form':form,
+ 'formset_multi':formset_multi,
+ 'formset_picture':formset_picture,
+ 'dated':settings.CHIMERE_DAYS_BEFORE_EVENT,
+ 'extra_head':form.media,
+ 'marker_id':item_id,
+ 'sub_categories':sub_categories,
+ 'point_widget':'',
+ 'properties':declared_fields,
+ 'filtered_properties':filtered_properties,
+ 'submited':submited,
+ 'route':True
})
# manualy populate the custom widget
if 'subcategory' in form.data and form.data['subcategory']: